package RRHH_Modelo;

import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;

public class RHH_CALENDARIO_EMPRESA {

    private int ID;
    private int ID_TIPO;
    private String DESCRIPCION;
    private Date FECHA;
    private Conexion con = null;

    public RHH_CALENDARIO_EMPRESA(Conexion con) {
        this.con = con;
    }

    public RHH_CALENDARIO_EMPRESA( int ID_TIPO, String DESCRIPCION, Date FECHA) {
        this.ID_TIPO = ID_TIPO;
        this.DESCRIPCION = DESCRIPCION;
        this.FECHA = FECHA;
    }
    
    public boolean CrearFinDeSemana(int domingo,int lunes, int martes, int miercoles, int jueves, int viernes, int sabado, int ano) throws SQLException
    {
        int[] dias = {domingo,lunes,martes,miercoles,jueves,viernes,sabado};        
        
        String consulta ="delete from BROKER.RHH_CALENDARIO_EMPRESA where DESCRIPCION like 'Fin de Semana' and extract(year from FECHA) like '"+ano+"'";
        con.EjecutarSentencia(consulta);
        String desc = "FIN DE SEMANA";
        RHH_TIPO_DIA td = new RHH_TIPO_DIA(desc, 1,"");
        td.setCon(con);
        td = td.Buscar(desc);
        int id=0;
        if(td==null)
        {
            td = new RHH_TIPO_DIA(desc,1,"");
            td.setCon(con);
            id = td.Insertar();
        }
        else
            id = td.getID();
        
        Calendar cal = new GregorianCalendar();
        cal.set(ano, 0, 1);
        int semanadas=cal.getActualMaximum(Calendar.WEEK_OF_YEAR);
        
        for (int i = 0; i <= semanadas+1; i++) 
        {                        
            for (int j = 1; j <= 7; j++) {
                
                cal.setWeekDate(ano, i, j);
                if(cal.get(Calendar.YEAR)==ano)
                {                
                    //1 Domingo,2 Lunes, 3 Martes, 4 Miercoles, 5 Jueves, 6 Viernes, 7 Sabado
                    if(dias[j-1]==1)
                    {
                        RHH_CALENDARIO_EMPRESA empr = new RHH_CALENDARIO_EMPRESA(id, "Fin de Semana", cal.getTime());         
                        empr.setCon(con);
                        empr.Insertar();
                    }
                }
            }            
        }
        return true;
    }

    public int Insertar() {
        try
        {
            String consulta = "insert into BROKER.RHH_CALENDARIO_EMPRESA( ID_TIPO, DESCRIPCION, FECHA) VALUES (" + ID_TIPO + ",'" + DESCRIPCION + "',to_date('" + getFECHA() + "','DD/MONTH/YYYY'))";
            con.EjecutarSentencia(consulta);
            consulta = "select BROKER.RHH_CALENDARIO_EMPRESA_SEQ.currval as ID from dual";
            ResultSet rs = con.EjecutarConsulta(consulta);
            rs.next();
            return rs.getInt("ID");
        }catch(Exception e)
        {
            return -1;
        }
    }

    public boolean EliminarXid() throws SQLException {
        String consulta = "delete from BROKER.RHH_CALENDARIO_EMPRESA where ID= " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
      
    
    public boolean update(int idtipo, String desc) throws SQLException {
        String consulta = "update BROKER.RHH_CALENDARIO_EMPRESA set ID_TIPO = "+idtipo+", DESCRIPCION = '"+desc+"' where ID= " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }

    public List<RHH_CALENDARIO_EMPRESA> Todos() throws SQLException {
        String consulta = "select * from BROKER.RHH_CALENDARIO_EMPRESA";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);
    }
    
    public int BuscarEvento(int dia, int mes, int ano) throws SQLException {
        String consulta = "select * from BROKER.RHH_CALENDARIO_EMPRESA where to_date(FECHA,'DD/MM/YYYY') like to_date('"+dia+"/"+mes+"/"+ano+"', 'DD/MM/YYYY')";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_CALENDARIO_EMPRESA> lista = Cargar(rs);
        if(lista.size()>0)
            return lista.get(0).getID_TIPO();
        else
            return 0;
    }
    
    public RHH_CALENDARIO_EMPRESA Buscar(int dia, int mes, int ano) throws SQLException {
        String consulta = "select * from BROKER.RHH_CALENDARIO_EMPRESA where to_date(FECHA,'DD/MM/YYYY') like to_date('"+dia+"/"+mes+"/"+ano+"', 'DD/MM/YYYY')";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_CALENDARIO_EMPRESA> lista = Cargar(rs);
        if(lista.size()>0)
            return lista.get(0);
        else
            return null;
    }
    

    public List<RHH_CALENDARIO_EMPRESA> Cargar(ResultSet rs) throws SQLException {
        List<RHH_CALENDARIO_EMPRESA> lista = new ArrayList<RHH_CALENDARIO_EMPRESA>();
        while (rs.next()) {
            RHH_CALENDARIO_EMPRESA objeto = new RHH_CALENDARIO_EMPRESA(con);
            objeto.setID(rs.getInt("ID"));
            objeto.setID_TIPO(rs.getInt("ID_TIPO"));
            objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
            objeto.setFECHA(rs.getDate("FECHA"));
            lista.add(objeto);
        }
        return lista;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_TIPO() {
        return ID_TIPO;
    }

    public void setID_TIPO(int ID_TIPO) {
        this.ID_TIPO = ID_TIPO;
    }

    public String getDESCRIPCION() {
        return DESCRIPCION;
    }

    public void setDESCRIPCION(String DESCRIPCION) {
        this.DESCRIPCION = DESCRIPCION;
    }

    public Date getFECHASF() {
        return FECHA;
    }
    public String getFECHA() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MMMM/yyyy");
        return sdf.format(FECHA);
    }

    public void setFECHA(Date FECHA) {
        this.FECHA = FECHA;
    }

    public Conexion getCon() {
        return this.con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }        
}
